
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>在Git中如何处理冲突？ - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>在Git中如何处理冲突？ - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">在Git中，什么是代码冲突？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">代码冲突指的是当两个或多个开发人员在不同的分支上修改了同一个文件的同一部分，并试图将这些更改合并到同一个分支时，Git无法自动决定哪些更改应该保留，从而导致了冲突。</div>
          </div>
          <div class="card-source">来源: 在Git中如何处理冲突</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">Git存储项目历史的方式与传统版本控制系统（如SVN）有何根本不同？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Git以快照（snapshot）的方式存储项目的历史，而不是传统的差异存储。每次提交，Git都会保存一个项目文件的快照，只有在文件有变动时才会保存新的文件快照，这种方式能高效地存储历史版本并快速恢复。</div>
          </div>
          <div class="card-source">来源: Git的基本概念 > 1. Git的核心概念</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">分类</div>
          <div class="card-question">除了并行修改同一代码段，请列举至少三种其他可能导致代码冲突的原因。</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">分类</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">1. 文件重命名或删除冲突：一个分支重命名文件，而另一个分支删除它。<br>2. 不同的分支策略和变更频率：团队成员没有及时拉取和合并最新的代码。<br>3. 大型重构或格式化改动：多个开发者同时进行大规模格式化或重构。<br>4. 未同步远程仓库的更改：在本地提交前，远程仓库已有新的相关变更。</div>
          </div>
          <div class="card-source">来源: GIT产生冲突的原因 > 代码冲突的产生原因</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">分类</div>
          <div class="card-question">Git中的冲突可以分为哪四大类？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">分类</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Git中常见的冲突类型可以分为四类：<br>1. 文件级别冲突 (File-Level Conflicts)<br>2. 行级别冲突 (Line-Level Conflicts)<br>3. 操作类型冲突 (Operation-Type Conflicts)<br>4. 合并复杂性冲突 (Merge Complexity Conflicts)</div>
          </div>
          <div class="card-source">来源: Git中冲突的类型</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">Git用于冲突检测的核心算法是什么？它依赖哪三个关键的提交点进行比较？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Git的冲突检测主要依赖于三方合并（Three-Way Merge）算法。它会比较以下三个提交点的差异：<br>1. 公共祖先（Merge Base）：两个分支分叉出来的共同起始点。<br>2. 当前分支的HEAD（Current HEAD）：当前分支的最新提交点。<br>3. 目标分支的HEAD（Incoming HEAD）：要合并的目标分支的最新提交点。</div>
          </div>
          <div class="card-source">来源: Git冲突的检测机制 > 1. 三方合并算法的工作原理</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">操作</div>
          <div class="card-question">当Git检测到冲突时，它会在文件中插入什么样的特殊标记来标示冲突区域？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">操作</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">Git会在冲突部分插入特殊标记以帮助识别冲突区域，这些标记通常如下：<br><<<<<<< HEAD<br>本地分支的更改<br>=======<br>远程分支的更改<br>>>>>>>> branch-name<br>其中`<<<<<<< HEAD` 和 `=======` 之间是当前分支的更改，`=======` 和 `>>>>>>> branch-name` 之间是要合并的目标分支的更改。</div>
          </div>
          <div class="card-source">来源: Git中冲突解决的步骤 > 2. 确定冲突的文件和位置</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">操作</div>
          <div class="card-question">在手动编辑并解决完所有冲突后，需要执行哪两个关键步骤来完成一次`merge`操作？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">操作</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">1. 使用 `git add <file>` 命令将已解决的冲突文件标记为暂存状态。<br>2. 使用 `git commit` 命令提交合并，完成整个合并操作。</div>
          </div>
          <div class="card-source">来源: Git中冲突解决的步骤 > 4. 标记冲突文件为已解决 & 5. 完成合并或重构操作</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">策略</div>
          <div class="card-question">在解决Git冲突时，`git merge -X ours` 和 `git merge -X theirs` 这两种策略有何区别？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">策略</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">`git merge -X ours` 策略告诉Git在发生冲突时优先使用当前分支（本地分支）的内容来解决冲突。而 `git merge -X theirs` 策略则告诉Git优先保留远程分支（即被合并分支）的更改。</div>
          </div>
          <div class="card-source">来源: GIT冲突解决策略 > 1. 优先保留本地更改 & 2. 优先保留远程更改</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">策略</div>
          <div class="card-question">为了预防和管理代码冲突，文档中提到了哪些有效的做法？请列出三项。</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">策略</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">1. 频繁拉取更新：确保本地仓库与远程仓库保持同步。<br>2. 小步提交：进行小而频繁的提交，更容易跟踪和合并变更。<br>3. 明确分支策略：制定清晰的分支管理策略，减少同一区域的代码修改。<br>(其他可接受的答案包括：代码审查、使用自动化测试和合并工具)。</div>
          </div>
          <div class="card-source">来源: GIT产生冲突的原因 > 预防和管理代码冲突</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
